package com.sharing.controller;

import com.sharing.common.Page;
import com.sharing.common.Result;
import com.sharing.domain.Comments;
import com.sharing.domain.UserProduction;
import com.sharing.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author MingTian
 * @version 1.0
 * @description TODO
 * @date 2023/4/3 10:29
 */
@RestController
@RequestMapping("/comment")
public class CommentController {
    @Autowired
    private CommentService commentService;

    /**
     * 根据评论id查询该评论的所有直接或间接评论
     * @param commentId
     * @param page
     * @param size
     * @return
     */
    @GetMapping("/comment")
    public Result<Page<Comments>> selectCommentsByCommentId(Integer commentId, Integer page, Integer size) {
        return commentService.selectCommentsByCommentId(commentId, page, size);
    }

    /**
     * 根据作品id查询该作品下所有的评论（评论需要区分是否为该作品的直接评论）
     * @param productionId
     * @param page
     * @param size
     * @return
     */
    @GetMapping("/production")
    public Result<Page<Comments>> selectCommentsByProductionId(Integer productionId, Integer page, Integer size) {
        return commentService.selectCommentsByProductionId(productionId, page, size);
    }

    /**
     * 通过评论id查询直接父级的评论————若返回数据为空，表示该评论为顶级父级评论
     * @return
     */
    @GetMapping("/parentComment")
    public Result<Comments> selectParentCommentByCommentId(Integer commentId) {
        return commentService.selectParentCommentByCommentId(commentId);
    }

    /**
     * 通过评论id查询顶级父级评论————若返回数据为空，表示该评论为顶级父级评论
     * @param commentId
     * @return
     */
    @GetMapping("/topParentComment")
    public Result<Comments> selectTopParentCommentByCommentId(Integer commentId) {
        return commentService.selectTopParentCommentByCommentId(commentId);
    }

    /**
     * 通过评论id查询顶级作品
     * @param commentId
     * @return
     */
    @GetMapping("/topProduction")
    public Result<UserProduction> selectProductionByCommentId(Integer commentId) {
        return commentService.selectProductionByCommentId(commentId);
    }

    /**
     * 根据用户id查询该用户的评论
     * @param userId
     * @return
     */
    @GetMapping("/userId")
    public Result<Page<Comments>> selectCommentsByUserId(Integer userId, Integer page, Integer size) {
        return commentService.selectCommentsByUserId(userId, page, size);
    }

    /**
     * 新增评论
     * @param comments
     * @return
     */
    @PostMapping()
    public Result<Comments> insertComment(@RequestBody Comments comments) {
        return commentService.insertComment(comments);
    }

    /**
     * 根据主键删除评论
     * @param id
     * @return
     */
    @DeleteMapping
    public Result<Integer> deleteCommentById(Integer id) {
        return commentService.deleteCommentById(id);
    }

    /**
     * 根据主键删除评论——多个
     * @param ids
     * @return
     */
    @DeleteMapping("/mult")
    public Result<Integer> deleteCommentsByIds(@RequestParam List<Integer> ids) {
        return commentService.deleteCommentsByIds(ids);
    }
}
